/*
 * @Author: Duyb
 * @Date: 2022-04-25 16:41:57
 * @Last Modified by: Duyb
 * @Last Modified time: 2022-04-27 22:29:09
 */
const path = require('path');

/**
 * createPages 用于创建页面
 * Gatsby 在构建应用时会调用该方法
 * 该方法需要在 gatsby-node.js 文件中定义
 */
async function createPages({ graphql, actions }) {
  const { createPage } = actions;
  // 获取模板的绝对路径
  const template = require.resolve('./src/templates/person.js');

  // 获取模板所需要的数据
  const persons = [
    {
      slug: 'zhangsan',
      name: '张三',
      age: 20,
    },
    {
      slug: 'lisi',
      name: '李四',
      age: 18,
    },
  ];

  // 根据模板和数据创建页面
  // 创建 person/xxx 页面
  persons.forEach((person) => {
    createPage({
      // 模板绝对路径
      component: template,
      // 访问地址
      path: `/person/${person.slug}`,
      // 传递给模板的数据
      context: person,
    });
  });

  /**
   * 创建 article 页面
   */
  const articleTemplate = require.resolve('./src/templates/article.js');
  const { data } = await graphql(`
    query {
      allMarkdownRemark {
        nodes {
          fields {
            slug
          }
        }
      }
    }
  `);
  console.log('allMarkdownRemark data :', data);
  data.allMarkdownRemark.nodes.forEach((node) => {
    if (node?.fields?.slug) {
      createPage({
        // 模板绝对路径
        component: articleTemplate,
        // 访问地址
        path: `/article/${node.fields.slug}`,
        // 传递给模板的数据
        context: {
          slug: node.fields.slug,
        },
      });
    }
  });
}

function onCreateNode({ node, actions }) {
  const { createNodeField } = actions;
  if (node.internal.type === 'MarkdownRemark' && node.fileAbsolutePath) {
    const slug = path.basename(node.fileAbsolutePath, '.md');
    console.log('post md slug :', slug);
    createNodeField({
      node,
      name: 'slug',
      value: slug,
    });
  }
}

module.exports = { createPages, onCreateNode };
